// 通过 Promise.resolve(value) 创建 Promise 实例

const promise = new Promise(function(fulfill,reject){
    try {
        let result = 100 / 0;
        fulfill(result);
    } catch (error) {
        reject(error)
    }
});

// 如果参数值是一个Promise实例，则直接返回这个Promise实例
const another = Promise.resolve(promise);
console.log( another === promise ); // true

console.log( '- '.repeat(10) );

const t = {
    // 带有 "then" 方法的实例就是所谓的 thenable 实例
    then(fulfill,reject) {
        console.log('正在执行thenable.then方法');
        fulfill('兑现')
        // reject('拒绝');
    }
}
// 如果参数值是thenable实例，
// 则返回的Promise实例会“跟随”这个thenable实例，采用它的最终状态
// 在 Promise.resolve 函数内部会调用 thenable.then 并为其传入两个函数做参数
const x = Promise.resolve( t );
console.log( x );
x.then( result => console.log( 'then:', result ) )
 .catch( reason => console.log( 'catch: ', reason ) )
 .finally( () => console.log('finally' ) );

console.log( '- '.repeat(10) );

const arr = [1,3,5,7,9];
// 参数既不是Promise实例也不是thenable对象
const p = Promise.resolve(arr);
console.log( p );

p.then( a => a.map( e => e**2 ) )
 .then( aa => aa.reduce( (p,c) => p + c , 0 ) )
 .then( sum => console.log( sum ));

console.log( '- '.repeat(10) );

// 总结:
// Promise.resolve( value ) 返回一个以给定值解析后的Promise实例